package other;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/**
 * 用两个栈实现队列
 * 队列支持一般队列的所有操作（push, pop, peek, isEmpty）
 * 思路：把push进stackIn的，倒序装入stackOut，
 * 出队列使用 StackOut, 进队列使用 stackIn
 */
public class StackToQueue {

    Stack<Integer> stackIn = new Stack<>();
    Stack<Integer> stackOut = new Stack<>();


    public void push(int x) {
        stackIn.push(x);
    }

    int pop() {
        // 待旧数据全部出栈之后再进行装入
        if (stackOut.isEmpty()) {
            while (!stackIn.isEmpty()) {
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.pop();
    }

    int peek() {
        if (stackOut.isEmpty()) {
            while (!stackIn.isEmpty()) {
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.peek();
    }

    boolean isEmpty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }
}
